#include <bitset>
#include <cassert>
#include <cstddef>
#include <iostream>
using namespace std;

int main()
{
    bitset<4> b1("0011");
    bitset<4> b2("1010");
    bitset<8> b3("11111111");
    bitset<8> b4("00000000");

    cout << "b1: " << b1 << endl;
    cout << "b2: " << b2 << endl;
    cout << "b3: " << b3 << endl;
    cout << "b4: " << b4 << endl;

    // 位操作
    b1 |= 0b1111; cout << "b1 |= 0b1111 -->" << b1 << endl;
    b2 &= 0b1111; cout << "b2 &= 0b1111 -->" << b2 << endl;
    b3 ^= 0b1111; cout << "b3 ^= 0b1111 -->" << b3 << endl;

    // 单独位操作
    b1=0b1010;
    b1.set(0,true); cout << "b1.set(1,true) -->" << b1 << endl;
    b1.set(1,false); cout << "b1.set(1,false) -->" << b1 << endl;
    b1.flip(2); cout << "b1.flip(2) -->" << b1 << endl;     // 翻转位
    b1.reset(3); cout << "b1.reset(3) -->" << b1 << endl;   // 重置位

    // 整个位操作
    b1=0b1010;
    b1.flip(); // 翻转所有位 0b0101
    b1.reset(); // 重置所有位 0b0000
    b1.set(); // 设置所有位 0b1111

    // 下角标操作
    b1=0b1010;
    bool val_bool = b1[0]; // 获取第0位
    b1[1] = false; // 设置第1位为false

    // 计数
    b1=0b1010;
    b1.count(); // 2
    b1.size();  // 4
    b1.to_ullong(); // 0b1010 = 10
    b1.to_string(); // "1010"

    return 0;
}